home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
blankery
/
xsb
/
popup.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-06-26
|
7KB
|
240 lines
#include "startup.h"
#include "xsb.h"
struct Window *w;
struct RastPort *rp;
struct Gadget *glist;
void brokeron(void);
void brokeroff(void);
void doblank(char*);
void doprefs(char*);
extern struct Library *XSBBase;
extern char popkey[],hotkey[],xsbname[];
long blankmouse,mousetimeout=30/5;
long screentimeout=300/5,randomblanker;
static long activeblankernum;
void LockWindow(struct Window*);
void UnlockWindow(struct Window*);
extern char version[];
static long __regargs slidercalc(long val)
{
return(val*5);
}
void loadprefs(void)
{
BPTR f;
if(f=CreateDir("ENV:XSB")) UnLock(f);
if(f=CreateDir("ENVARC:XSB")) UnLock(f);
f=Open("ENV:XSB/XSB.prefs",MODE_OLDFILE);
if(!f) return;
Read(f,popkey,40);
Read(f,hotkey,40);
Read(f,xsbname,30);
Read(f,&blankmouse,4);
Read(f,&mousetimeout,4);
Read(f,&screentimeout,4);
Read(f,&randomblanker,4);
Close(f);
}
void saveprefs(char *name)
{
BPTR f=Open(name,MODE_NEWFILE);
if(!f) return;
Write(f,popkey,40);
Write(f,hotkey,40);
Write(f,xsbname,30);
Write(f,&blankmouse,4);
Write(f,&mousetimeout,4);
Write(f,&screentimeout,4);
Write(f,&randomblanker,4);
Write(f,version,strlen(version));
Close(f);
}
static struct List labels;
static void getxsblist(void)
{
char parsed[64];
struct Node *node;
char *mem,*p;
long blankercount=0;
struct ExAllData *ead=AllocVec(8192,MEMF_CLEAR);
struct ExAllControl *eac=AllocDosObjectTagList(DOS_EXALLCONTROL,TAG_DONE);
BPTR lock=Lock("LIBS:",SHARED_LOCK);
if(!ead || !eac || !lock) goto xit;
NewList(&labels);
activeblankernum=0;
ParsePatternNoCase("XSB#?.library",parsed,64);
eac->eac_MatchString=parsed;
ExAll(lock,ead,8192,ED_NAME,eac);
if(!eac->eac_Entries) goto xit;
while(ead) {
node=AllocVec(sizeof(struct Node),MEMF_CLEAR);
if(!stricmp(ead->ed_Name,xsbname)) activeblankernum=blankercount;
p=&ead->ed_Name[3];
while(*p!='.') p++; *p=0;
p=&ead->ed_Name[3];
mem=AllocVec(strlen(p),0);
strcpy(mem,p);
node->ln_Name=mem;
AddTail(&labels,node);
ead=ead->ed_Next;
blankercount++;
}
xit:
if(ead) FreeVec(ead);
if(eac) FreeDosObject(DOS_EXALLCONTROL,eac);
if(lock) UnLock(lock);
}
static void freelabels(void)
{
struct Node *l;
while(l=RemHead(&labels)) {
FreeVec(l->ln_Name);
FreeVec(l);
}
}
struct Node *findnode(int num)
{
struct Node *n=labels.lh_Head;
int c;
for(c=0; c<num; c++) n=n->ln_Succ;
return(n);
}
static void doblankerinfo(char *name)
{
if(!(XSBBase=OldOpenLibrary(name))) {
doreq("XSBCX","Can't open blanker library\n%s","Cancel",name);
return;
}
LockWindow(w);
doreq(name,XSBGetID(),"OK");
CloseLibrary(XSBBase);
UnlockWindow(w);
}
void popup(void)
{
struct IntuiMessage *im;
long code,class;
struct Gadget *g;
int running=1;
long tempblankmouse=blankmouse;
long tempmousetimeout=mousetimeout;
long tempscreentimeout=screentimeout;
long temprandomblanker=randomblanker;
char tempxsbname[40],temppopkey[40],temphotkey[40];
strcpy(tempxsbname,xsbname);
strcpy(temphotkey,hotkey);
strcpy(temppopkey,popkey);
getxsblist();
if(!(w=OpenWindowTags(0,
WA_Left,50,WA_Top,50,
WA_Width,450,WA_Height,175,
WA_Title,"XSBCX Setup Window",
WA_ScreenTitle,"XSBCX V1.0 (" __DATE__ ") © 1992 by Oliver Wagner, All Rights Reserved",
WA_Flags,ACTIVATE|WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE|REPORTMOUSE,
WA_IDCMP,CLOSEWINDOW|GADGETUP|GADGETDOWN|MOUSEMOVE,
WA_AutoAdjust,TRUE,
TAG_DONE))) return;
rp=w->RPort;
gt_init();
glist=gt_newlist();
gt_drawbox(8,15,434,40,1);
gt_drawbox(196,57,234+12,33,1);
gt_drawbox(192,57+34,234+12+4,56,1);
gt_drawbox(8,57,186,90,1);
SetAPen(rp,0);
RectFill(rp,192,57+34+1,195,57+34+1+53);
gt_createg(40,152, 70,15, BUTTON_KIND, "Save", 0, TAG_DONE);
gt_createg(225-35,152, 70,15, BUTTON_KIND, "Use", 0, TAG_DONE);
gt_createg(340,152, 70,15, BUTTON_KIND, "Cancel", 0, TAG_DONE);
gt_createg(105,20,328,14, STRING_KIND, "Blank Key:", NG_HIGHLABEL, GTST_String,hotkey, GTST_MaxChars,40, TAG_DONE);
gt_createg(105,36,328,14, STRING_KIND, "Popup Key:", NG_HIGHLABEL, GTST_String,popkey, GTST_MaxChars,40, TAG_DONE);
gt_createg(309,62, 40,14, CHECKBOX_KIND, "Blank Mouse:", NG_HIGHLABEL, GTCB_Checked, blankmouse, TAG_DONE);
gt_createg(309,63+13, 85,10, SLIDER_KIND, "Timeout:", NG_HIGHLABEL, GTSL_Min,1, GTSL_Max,36, GTSL_MaxLevelLen,4, GTSL_LevelFormat, "%-3lds", GTSL_LevelPlace,PLACETEXT_RIGHT, GTSL_DispFunc, slidercalc, PGA_Freedom, LORIENT_HORIZ, GTSL_Level,mousetimeout,GA_RelVerify,TRUE,TAG_DONE);
gt_createg(309,62+33, 40,14, CHECKBOX_KIND, "Pick Random:", NG_HIGHLABEL, GTCB_Checked, randomblanker, TAG_DONE);
gt_createg(309,63+13+33, 85,10, SLIDER_KIND,"Timeout:", NG_HIGHLABEL, GTSL_Min,1, GTSL_Max,36*3, GTSL_MaxLevelLen,4, GTSL_LevelFormat, "%-3lds", GTSL_LevelPlace,PLACETEXT_RIGHT, GTSL_DispFunc, slidercalc, PGA_Freedom, LORIENT_HORIZ, GA_RelVerify,TRUE,GTSL_Level,screentimeout,TAG_DONE);
gt_createg(220,63+33+13+18, 50,13, BUTTON_KIND, "Test", 0,TAG_DONE);
gt_createg(220+75,63+33+13+18, 50,13, BUTTON_KIND, "Info", 0,TAG_DONE);
gt_createg(220+150,63+33+13+18, 50,13, BUTTON_KIND, "Prefs", 0,TAG_DONE);
gt_createg(20,75,160,70, LISTVIEW_KIND, "Avaible Blankers:", NG_HIGHLABEL|PLACETEXT_ABOVE,
GTLV_Top,0,GTLV_Selected,activeblankernum,
GTLV_Labels,&labels,
GTLV_ScrollWidth,16,
GTLV_ShowSelected,0,
TAG_DONE);
gt_endlist();
while(running) {
while(!(im=GT_GetIMsg(w->UserPort))) WaitPort(w->UserPort);
class=im->Class;
code=im->Code;
g=im->IAddress;
GT_ReplyIMsg(im);
switch(class) {
case CLOSEWINDOW: running=0; break;
case GADGETUP: switch(g->GadgetID) {
case 1:
case 2:
strcpy(xsbname,tempxsbname);
blankmouse=tempblankmouse;
mousetimeout=tempmousetimeout;
randomblanker=temprandomblanker;
screentimeout=tempscreentimeout;
strcpy(hotkey,gt_findstring(4));
strcpy(popkey,gt_findstring(5));
if(g->GadgetID==1) saveprefs("ENVARC:XSB/XSB.prefs");
saveprefs("ENV:XSB/XSB.prefs");
case 3: running=0; break;
case 4: ActivateGadget(gt_findid(5),w,0); break;
/* case 5: break;*/
case 6: tempblankmouse=gt_findstate(6); break;
case 7: tempmousetimeout=code; break;
case 8: temprandomblanker=gt_findstate(8); break;
case 9: tempscreentimeout=code; break;
case 10: Delay(10); LockWindow(w); brokeron(); doblank(tempxsbname); brokeroff(); UnlockWindow(w); break;
case 11: doblankerinfo(tempxsbname); break;
case 12: LockWindow(w); doprefs(tempxsbname); UnlockWindow(w); break;
case 13: sprintf(tempxsbname,"xsb%s.library",findnode(code)->ln_Name); break;
}
}
}
gt_remlist(glist);
CloseWindow(w);
freelabels();
}